import { tips, confirm, coludRequest } from '../util/util.js' 
//获取应用实例
const app=new getApp()
// pages/spot/sindex.js
Page({
  /**
   * 页面的初始数据
   */
  data: {
    //存储原始数据 num值=0,
    userInfo:null, //用户信息
    StartMenus:[],
    //左侧选中的索引
    currentIndex:0,
    conntentActive:'',//内容栏选中的id
    zjd:0,
    zjdHeigtharr:[],
    Select:false, //是否有选择 是为true 否false4
    num:0,
    showModalStatus: false ,
    switch1Checked:false,//外卖 自取 开关
     //显示商品信息 弹出层的数据绑定
     list:{
      cat_picture:"",
      sub_name:"",
      sub_summary:"",
      sub_price:"",
      num:0,
      sub_id:"",
      sub_delete:false,
      sub_norms:null
     },
     hideModal: true, //模态框的状态  true-隐藏  false-显示
     animationData: {},//,
     sumPrice:0
      
  },
  //去结算
  settlement:function(){
    //获取缓存购物车数据
    let cart= wx.getStorageSync('cart') || [];
    //判断是否有数据 无数据提示添加购物车
    if(cart.length>0)
    {
      //获取该用户的第一条地址
      wx.cloud.callFunction({
        name:'login',
        data:{},
        success:res=>{
          let openId=res.result.userInfo.openId;
          coludRequest('admin',{module:'UserAddress',action:'query',map:{openId:openId}},function(res)
                {
                  if(res.result.data.length>0){
                    wx.redirectTo({
                      url: '/pages/take/detail/index',
                    }) 
                  }else{
                    tips('请先去个人中心填写地址')
                  }
                })
        }
      })
     
    }else{
      tips('你还未选择要购买的商品哦！');
    }
    
    
    
  },
  //计算购物车的总价格
  TotalPrice:function(){
     var that=this;
     let sum=0;
     //获取缓存数据
     let cart=  wx.getStorageSync('cart') || [];
     if(cart.length>0){
       for(let i=0;i<cart.length;i++){
        sum+=cart[i].num*cart[i].sub_price;
       }
     }
     that.setData({sumPrice:sum})
  },
  // 显示购物车遮罩层
   showModal: function (e) {
  //关闭打开的商品信息
  var currentStatu = e.currentTarget.dataset.statu; 
  if (currentStatu == "close") { 
    //清空数量 并关闭模态框
    var list=this.data.list;
    list.num=0;
    this.setData( 
    { 
    showModalStatus: false , //这是关闭框
    list:list
    }); 
  }
   var that=this;
   that.setData({
     hideModal:false
   })
   var animation = wx.createAnimation({
     duration: 200,//动画的持续时间 默认400ms   数值越大，动画越慢   数值越小，动画越快
     timingFunction: 'ease',//动画的效果 默认值是linear
   })
   this.animation = animation 
   setTimeout(function(){
     that.fadeIn();//调用显示动画
   },100)   
 },

 // 隐藏购物车遮罩层
 hideModal: function () {
   var that=this; 
   var animation = wx.createAnimation({
     duration: 200,//动画的持续时间 默认400ms   数值越大，动画越慢   数值越小，动画越快
     timingFunction: 'ease',//动画的效果 默认值是linear
   })
   this.animation = animation
   that.fadeDown();//调用隐藏动画   
   setTimeout(function(){
     that.setData({
       hideModal:true
     })      
   },220)//先执行下滑动画，再隐藏模块
   
 },
 //弹出购物车 加减方法  true为加 false为减
 CartPulsCut:function(event,bo){
   var that=this;
  let sub_id=event.currentTarget.dataset.sub_id;
   let cart=wx.getStorageSync('cart') || [];
   for(let i=0;i<cart.length;i++){
     if(cart[i].sub_id==sub_id){
       if(bo){
         //true 为加
         cart[i].num= cart[i].num+1
       }else
       {
         //false 为减
         cart[i].num= cart[i].num-1
         if(cart[i].num<=0){
           //使用循环找打数据并赋值为0
           let Menus=that.data.Menus;
           for(let k=0;k<Menus.length;k++){
             for(let j=0;j<Menus[k].children.length;j++){
               if(cart[i].sub_id==Menus[k].children[j].sub_id){
                Menus[k].children[j].num=0;
               }
             }
           }
           that.setData({Menus})
           cart.splice(i,1);
            
         }
       }
     }
   }
 
   wx.setStorageSync('cart',cart)
    this.setData({cart})
    //刷新页面
    //成功后刷新页面
    let Menus=this.data.Menus;
    //调用刷新页面数量的方法
    this.LoadCart(Menus);
    //给页面重新赋值
    this.setData({
      Menus
    })
    //计算价格
    this.TotalPrice();
 },
 //购物车弹出层 添加按钮
 btnCartPlus:function(event){
  this.CartPulsCut(event,true);
 },
 btnCartCut:function(event){
  this.CartPulsCut(event,false);
 },
 //打开购物车 动画集
 fadeIn:function(){
   
   //得到缓存的购物车数据
   let cart=wx.getStorageSync('cart') || [];
   
   this.animation.translateY(0).step()
   this.setData({
     animationData: this.animation.export(),//动画实例的export方法导出动画数据传递给组件的animation属性
     cart  //将购物车数据绑定到页面
   })    
 },
 //关闭购物车
 fadeDown:function(){
   this.animation.translateY(600).step()
   this.setData({
     animationData: this.animation.export(),  
   })
 }, 
  //购物车详情
  catdj(){
    
  },
  //加入购物车方法  参数 商品信息
  addCart(chiledren,tanchu){
    //获取购物车数据
    var arr=wx.getStorageSync('cart')||[];
    let cartData=[];
    if(arr.length>0){
      //购物车有数据
      //判断数据是否已经存在 如果不存在就新增，存在则在原来的基础上覆盖\
      let panduan=true;
      for(let i=0;i<arr.length;i++){
        if(arr[i].sub_id==chiledren.sub_id){
            //判断如果是页面就覆盖，
            //如果是弹出层就在原有的基础上 加上数量
            if(tanchu){
              //为true 时  覆盖
               arr[i]=chiledren;
            }else{
              //为false时 原有的基础上加上数量
              arr[i].num=chiledren.num+arr[i].num;
            }
            //
           panduan=false;
        }
      }
      if(panduan){
        arr.push(chiledren)
      }
      wx.setStorageSync('cart', arr);
    }else{
      //购物车无数据
      cartData.push(chiledren);
      wx.setStorageSync('cart', cartData)
    }
  },
  //减去购物车方法 参数 商品信息
  jianCart(chiledren){
    //减去购物车
    //获取购物车数据
    var arr=wx.getStorageSync('cart')||[];
    let cartData=[];
    //判断是否有数据
    if(arr.length>0){
      //1判断数量是否小于等于0，
      //2是则从数组中移除该商品,
      //3否则把减去的数据重新赋值给商品
      if(chiledren.num<=0){
        for(let i=0;i<arr.length;i++){
          if(arr[i].sub_id==chiledren.sub_id){
            arr.splice(i,1);
          }
        }
        
      }else{
        for(let i=0;i<arr.length;i++){
          if(arr[i].sub_id==chiledren.sub_id){
             arr[i]=chiledren;
          }
        }
      }
      wx.setStorageSync('cart', arr);
    } 
  },
  // 主页面加 按钮  
  btnPlus:function(event){
    //判断是否有登录
    if(this.data.userInfo==null){
      wx.navigateTo({
        url: '/pages/my/Login/index',
      }) 
      return
    }
    var that=this;
    let index1=event.currentTarget.dataset.index1
    let index2=event.currentTarget.dataset.index2
    let cData=that.data.Menus;
    let chiledren=cData[index1].children[index2];
    chiledren.num=cData[index1].children[index2].num+1;
    
    //加入购物车
    this.addCart(chiledren,true);
    
    //赋值
    that.setData({
      Menus:cData
    })
     //计算价格
     that.TotalPrice();
  },
  //主页面 减 按钮
  btnCut:function(event){
    var that=this;
    let index1=event.currentTarget.dataset.index1
    let index2=event.currentTarget.dataset.index2
    let cData=that.data.Menus;
    let chiledren=cData[index1].children[index2];
    cData[index1].children[index2].num=cData[index1].children[index2].num-1;
    //减去购物车中的商品
    this.jianCart(chiledren);
    that.setData({
      Menus:cData
    })
    //计算价格
    that.TotalPrice();
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    //加载用户信息
    this.GetUser();
    //获取数据
    this.GetList();
    //计算价格
    this.TotalPrice();
  },
  //左侧分类点击事件
  handleItemTap(e){
    this.setData({
      currentIndex:e.currentTarget.dataset.index,
      conntentActive:e.currentTarget.dataset.id
    })
  },
  //查询数据
  GetList:function(){
    var that=this;
    //获取商品列表数据 
    wx.cloud.callFunction({
      name:'admin',
      data:{},
      success:res=>{
        coludRequest('admin',{module:'Product',action:'query',map:{}},function(res)
        {
            var arr=res.result.data[0].list;
              let Menus =  arr;
              var  arrlength=arr.length;
              //获取每个节点高度
              that.jisuanJd();
              //调用刷新页面数量的方法
              that.LoadCart(Menus);

              that.setData({
                Menus,
                zjb:arrlength
              })
        })
      },  
      fail:err=>{
        tips('发生了错误')
      }
    })
  },
  //购物车存在时 刷新页面的数量 传入页面所有数据对应赋值
  LoadCart:function(Menus){
    //获取购物车数据
    let cart=wx.getStorageSync('cart') || [];
    if(cart.length>0){
      //如果存在 将数据的数量加载到页面上
      for(let i=0;i<Menus.length;i++){
        for(let j=0;j<Menus[i].children.length;j++){
          //循环购物车
           for(let k=0;k<cart.length;k++){
             if(cart[k].num>0 && cart[k].sub_id==Menus[i].children[j].sub_id){
               //如果数量大于0将数据赋值到 加载商品页面的数量
               Menus[i].children[j].num=cart[k].num;
             }
           }
        }
      }
    } 
  },
    /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    //const {index}=0;
    
},
jisuanJd(){
  var that=this;
  var arr=[];
  var sum=0;
    setTimeout(() => {
       for(var i=0;i<that.data.zjb;i++){
        //创建节点选择器
        var query = wx.createSelectorQuery(); 
        //选择id
        query.select('#d'+(i+1)).boundingClientRect()
        query.selectViewport().scrollOffset()
        query.exec(function (res) {
          //res就是 所有标签为mjltest的元素的信息 的数组
          //取高度
          var temp = res[0].height;
          sum+=temp;
          arr.push(sum)
        })
      }
      that.setData({
        zjdHeigtharr:arr
      })
  }, 1000)
},
//右侧滑动事件
scroll(e){
  var that = this;
  var top = e.detail.scrollTop;//离最上面的高度
  var j =0;
  for(var i=0;i<that.data.zjdHeigtharr.length;i++)
  {
    if(top<=that.data.zjdHeigtharr[i]-1)
    {
      j=i;
      break;
    }
  }
  that.setData({
    currentIndex:j
  })
},
  // 以下是商品信息弹出层
  powerDrawer: function (e) { 
  var currentStatu = e.currentTarget.dataset.statu; 
  //判断如果是打开状态 就将数据赋值
  if(currentStatu=='open'){
    let index1=e.currentTarget.dataset.index1;
    let index2=e.currentTarget.dataset.index2;
    let product=this.data.Menus[index1].children[index2];
      //这里将商品详细信息绑定 用于显示
    let list=this.data.list;
    list.cat_picture=product.cat_picture;
    list.sub_name=product.sub_name;
    list.sub_summary=product.sub_summary;
    list.sub_price=product.sub_price;
    list.num=1;
    list.sub_id=product.sub_id;
    list.sub_delete=product.sub_delete;
    list.sub_norms=product.sub_norms;

    this.setData({
      list:list
    })
  }
   this.util(currentStatu) 
  }, 
  //弹出自定义框 (商品信息)
  util: function(currentStatu){ 
  /* 动画部分 */ 
  // 第1步：创建动画实例 
  var animation = wx.createAnimation({ 
  duration: 200, //动画时长 
  timingFunction: "linear", //线性 
  delay: 0 //0则不延迟 
  }); 
  // 第2步：这个动画实例赋给当前的动画实例 
  this.animation = animation; 
  // 第3步：执行第一组动画 
  animation.opacity(0).rotateX(-100).step(); 
  // 第4步：导出动画对象赋给数据对象储存 
  this.setData({ 
  animationData: animation.export() 
  }) 
  // 第5步：设置定时器到指定时候后，执行第二组动画 
  setTimeout(function () { 
  // 执行第二组动画 
  animation.opacity(1).rotateX(0).step(); 
  // 给数据对象储存的第一组动画，更替为执行完第二组动画的动画对象 
  this.setData({ 
  animationData: animation 
  }) 
  //关闭 
  if (currentStatu == "close") { 
    //清空数量 并关闭模态框
    var list=this.data.list;
    list.num=0;
    this.setData( 
    { 
    showModalStatus: false , //这是关闭框
    list:list
    } 
  ); 
  } 
  }.bind(this), 200) 
  
  // 显示 
  if (currentStatu == "open") { 
   
   this.setData({
    showModalStatus: true ,
     
   })
  
  } 
  } ,
  bandleChange(e){
    // 1 获取单选框中的值
    let data = e.detail.value;
    // 2 把值赋值给 data 中的数据
  },
  //弹出层加减操作
  btnPopup_Plus:function(){
    var list=this.data.list;
    list.num=list.num+1;
    this.setData({list:list})
  },
  btnPopup_Cut:function(){
    var list=this.data.list;
    //小于0时不进行操作
    if(list.num<=1){
      return;
    }
    list.num=list.num-1;
    
    this.setData({list:list})
  },
  //弹出层加入购物车
  addToCart:function(){
    //1获取弹出层的数据
    var children=this.data.list;
    //2调用加入购物车方法 并传入参数
    this.addCart(children,false);
    tips('成功加入购物车')
     
    //成功后刷新页面
    let Menus=this.data.Menus;
    //调用刷新页面数量的方法
    this.LoadCart(Menus);
    //给页面重新赋值
    this.setData({
      Menus
    })
    //计算价格
    this.TotalPrice();
    
  },
  //清空购物车
  clearCart:function(){
     var that=this;
     wx.removeStorage({
       key: 'cart',
       success:res=>{
         //成功后获取原始数据刷新页面 
        let Menus= that.data.Menus;
        for(let i=0;i<Menus.length;i++){
          for(let j=0;j<Menus[i].children.length;j++){
            //循环购物车
              if(Menus[i].children[j].num>0){
                //把大于0的 数量全部赋值为0
                Menus[i].children[j].num=0;
              }
          }
        }
        that.setData({
          Menus,
          sumPrice:0
        })
         //刷新购物车
         that.Refresh();
          
         tips('清空购物车成功')
         
         
       }
     })
     
  },
   
  //刷新购物车
  Refresh:function(){
   let cart=wx.getStorageSync('cart') || [];
   this.setData({
     cart  //将购物车数据绑定到页面
   })  
  },
   //获取用户登录
   GetUser:function(){
    // 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.record" 这个 scope
    if (app.globalData.userInfo) {
      this.setData({
        userInfo: app.globalData.userInfo,
        hasUserInfo: true
      })
    } else if (this.data.canIUse){
      // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回
      // 所以此处加入 callback 以防止这种情况
      wx.reLaunch({
        url: '/pages/my/Login/index',
      })
    } else {
      // 在没有 open-type=getUserInfo 版本的兼容处理
      wx.getUserInfo({
        success: res => {
          app.globalData.userInfo = res.userInfo
          this.setData({
            userInfo: res.userInfo,
            hasUserInfo: true
          })
        }
      })
    }
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})